﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AudiPyme.DAL;

namespace AudiPyme.BLL
{
    //Clase que sirve para formatear las amenazas de la base de conocimiento
    public class AmenazasTabla
    {
        int idAmenaza;
        String amenaza;
        String tipoAmenaza;

        public int IdAmenaza
        {
            get { return idAmenaza; }
            set { idAmenaza = value; }
        }

        public String Amenaza
        {
            get { return amenaza; }
            set { amenaza = value; }
        }

        public String TipoAmenaza
        {
            get { return tipoAmenaza; }
            set { tipoAmenaza = value; }
        }

        public AmenazasTabla()
        {
            idAmenaza = 0;
            amenaza = "";
            tipoAmenaza = "";
        }

        public AmenazasTabla(int IdAmenaza, String Amenaza, String TipoAmenaza)
        {
            idAmenaza = IdAmenaza;
            amenaza = Amenaza;
            tipoAmenaza = TipoAmenaza;
        }

        //Recoge las amenazas actuales que hay en la base de conocimiento
        public static List<AmenazasTabla> AmenazasActuales()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<AmenazasTabla> LRelaciones = new List<AmenazasTabla>();
            IQueryable<AmenazasTabla> relaciones = (from Amen in agenteBD.AmenazasEstablecer
                                                    join TipAmen in agenteBD.TiposAmenazasEstablecer on Amen.IdTipoAmenaza equals TipAmen.IdTipoAmenaza
                                                    where Amen.Actual == true
                                                    select new AmenazasTabla { IdAmenaza = Amen.IdAmenaza, Amenaza = Amen.Amenaza, TipoAmenaza = TipAmen.TipoAmenaza }).OrderBy(a => a.IdAmenaza);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Recoge las amenazas que se han eliminado (borrado lógico) de la base de conocimiento
        public static List<AmenazasTabla> AmenazasEliminadas()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<AmenazasTabla> LRelaciones = new List<AmenazasTabla>();
            IQueryable<AmenazasTabla> relaciones = (from Amen in agenteBD.AmenazasEstablecer
                                                    join TipAmen in agenteBD.TiposAmenazasEstablecer on Amen.IdTipoAmenaza equals TipAmen.IdTipoAmenaza
                                                    where Amen.Actual == false
                                                    select new AmenazasTabla { IdAmenaza = Amen.IdAmenaza, Amenaza = Amen.Amenaza, TipoAmenaza = TipAmen.TipoAmenaza }).OrderBy(a => a.IdAmenaza);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Recoge las amenazas que actuales en la base de conocimiento cuyo nombre de amenaza contiene la secuencia TextoBuscar
        public static List<AmenazasTabla> AmenazasActualesPorAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<AmenazasTabla> LRelaciones = new List<AmenazasTabla>();
            IQueryable<AmenazasTabla> relaciones = (from Amen in agenteBD.AmenazasEstablecer
                                                    join TipAmen in agenteBD.TiposAmenazasEstablecer on Amen.IdTipoAmenaza equals TipAmen.IdTipoAmenaza
                                                    where Amen.Actual == true && Amen.Amenaza.Contains(TextoBuscar)
                                                    select new AmenazasTabla { IdAmenaza = Amen.IdAmenaza, Amenaza = Amen.Amenaza, TipoAmenaza = TipAmen.TipoAmenaza }).OrderBy(a => a.IdAmenaza);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Recoge las amenazas eliminadas (borrado lógico) en la base de conocimiento cuyo nombre de amenaza contiene la secuencia TextoBuscar
        public static List<AmenazasTabla> AmenazasEliminadasPorAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<AmenazasTabla> LRelaciones = new List<AmenazasTabla>();
            IQueryable<AmenazasTabla> relaciones = (from Amen in agenteBD.AmenazasEstablecer
                                                    join TipAmen in agenteBD.TiposAmenazasEstablecer on Amen.IdTipoAmenaza equals TipAmen.IdTipoAmenaza
                                                    where Amen.Actual == false && Amen.Amenaza.Contains(TextoBuscar)
                                                    select new AmenazasTabla { IdAmenaza = Amen.IdAmenaza, Amenaza = Amen.Amenaza, TipoAmenaza = TipAmen.TipoAmenaza }).OrderBy(a => a.IdAmenaza);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Recoge las amenazas que actuales en la base de conocimiento cuyo tipo de amenaza contiene la secuencia TextoBuscar
        public static List<AmenazasTabla> AmenazasActualesPorTipoAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<AmenazasTabla> LRelaciones = new List<AmenazasTabla>();
            IQueryable<AmenazasTabla> relaciones = (from Amen in agenteBD.AmenazasEstablecer
                                                    join TipAmen in agenteBD.TiposAmenazasEstablecer on Amen.IdTipoAmenaza equals TipAmen.IdTipoAmenaza
                                                    where Amen.Actual == true && TipAmen.TipoAmenaza.Contains(TextoBuscar)
                                                    select new AmenazasTabla { IdAmenaza = Amen.IdAmenaza, Amenaza = Amen.Amenaza, TipoAmenaza = TipAmen.TipoAmenaza }).OrderBy(a => a.IdAmenaza);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        //Recoge las amenazas que eliminadas (borrado lógico) de la base de conocimiento cuyo tipo de amenaza contiene la secuencia TextoBuscar
        public static List<AmenazasTabla> AmenazasEliminadasPorTipoAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<AmenazasTabla> LRelaciones = new List<AmenazasTabla>();
            IQueryable<AmenazasTabla> relaciones = (from Amen in agenteBD.AmenazasEstablecer
                                                    join TipAmen in agenteBD.TiposAmenazasEstablecer on Amen.IdTipoAmenaza equals TipAmen.IdTipoAmenaza
                                                    where Amen.Actual == false && TipAmen.TipoAmenaza.Contains(TextoBuscar)
                                                    select new AmenazasTabla { IdAmenaza = Amen.IdAmenaza, Amenaza = Amen.Amenaza, TipoAmenaza = TipAmen.TipoAmenaza }).OrderBy(a => a.IdAmenaza);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }


    }
}
